OVSDB管理协议 翻译

​ 本文为翻译ovsdb管理协议 作为学习,原地址为 【RFC 7047

介绍

在虚拟服务器环境中,需要一台虚拟交换机(virtual switch)来转发基于同一物理机的多台虚拟机 (VMs) 以及与物理网络之间的流量。

Open vSwitch【OVS】是一款开源软件,专门设计作为虚拟交换机用以上述环境。OVS 使用 OVSDB ( Open vSwitch Database ) 控制协议以及 OpenFlow 协议来进行程序拓展及控制使用。OVS 项目包含了开源的 OVSDB 客户端以及服务端的接口。

OVSDB管理协议使用 JSON【RFC4627】 作为传输格式,并基于 JSON-RPC 1.0 【JSON-RPC】版本。

OVSDB的数据库模型( schema )的文档在【DB-SCHEMA 】,这份文档说明该协议通过与数据库交流来管理和设置 ovs 实例。同时也意味着可以通过此文档查明当前使用的数据库模型( schema ) ,将与4.1.2节介绍 。

OVSDB 管理协议 是为了可以以编程的方式访问 OVSDB 。 该数据库存放着一个虚拟交换机( vSwitch )进程的配置。 通常该配置描述了该虚拟交换机的行为,而没有描述其路由系统的行为和配置。未来是否会涉及到路由系统的元素以及数据表的扩展,就需要留意 IETF 的 I2RS 工作组是否定义路由系统的实时或事件驱动交流的协议以及数据模型 。

要求语言 (Requirements Language)

关键词 必须 “MUST” ,绝不 “MUST NOT “ , 必需 “REQUIRED” ,将要 “SHALL” ,将不能 “SHALL NOT” ,应当 “SHOULD” ,应当不 “SHOULD NOT” ,建议 “RECOMMENDED” ,可选的 “OPTIONAL” 。 具体描述在 RFC2119 中。

术语(Terminology)

UUID :通用唯一标识符(Universally Unique Identifier)。一段128位的标识符,在空间和时间上都是唯一的。

1
2
Universally Unique Identifier.  A 128-bit identifier that
is unique in space and time

OVS: Open vSwitch. 一款开源的虚拟交换机

1
Open vSwitch.  An open-source virtual switch.

OVSDB: 用以管理OVS实例的数据库

1
2
The database that is used for the purpose of configuring
OVS instances.

JSON: Javascript 对象表示方法

1
Javascript Object Notation

JSON-RPC: JSON 远程调用方法

1
JSON Remote Procedure Call

Durable : 对非可变形介质(如硬盘)的可靠性写入。ovsdb支持 是否指定传输为持久性的。

1
2
3
Reliably written to non-volatile storage (e.g., disk).
OVSDB supports the option to specify whether or not
transactions are durable.

请注意,JSON RFC4627 清晰地定义了一系列重要项目,比如 JSON 的 value ,object ,arrays,以及strings , 本文档在所有情况下皆使用 RFC4627 的定义。

系统概述

下图(Figure 1)描述了Open vSwitch 的主要构成, 以及控制和管理集群的接口。一个OVS实例由一个数据库服务器(ovsdb-server) ,一个虚拟交换机进程 (ovs-vswitchd) ,以及可选的可执行快速转发的模块组成。”Control & Management Cluster”(控制及管理集群)指一定数量的Manager(管理器)和controller(控制器)。控制器们使用 OVSDB管理协议(OVSDB management protocol)去管理 OVS 实例或实例集群 。一个ovs实例由至少有一个管理器管理,控制器们使用openflow协议去为支持Openflow协议的交换机安装流表。一个ovs实例支持多个逻辑数据路径(logical datapaths) , 也就是作为网桥(bridges), 每一个Openflow网桥至少有一个控制器来控制。

OVSDB管理接口用以管理及配置OVS实例的操作。对比起OpenFlow, OVSDB管理操作作用于更长的时间段(时间窗口),以下为OVSDB所支持的操作例子:

  • 创建,修改,删除 OpenFlow 数据通路 ( 网桥 ),数据通路在单一OVS实例会有很多个。
  • 配置控制器集去连接某一个OpenFlow数据通路
  • 配置管理器集去连接某一个OVSDB服务器
  • 创建,修改,删除 OpenFlow 数据通路的端口
  • 创建,修改,删除 OpenFlow数据通路的隧道接口
  • 创建,修改,删除 队列
  • 配置QoS策略,并将该规则绑定到队列
  • 收集统计数列。

OVSDB并不会针对每一条流进行操作,这些事情留给OpenFlow去完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  +----------------------+
| Control & |
| Management |
| Cluster |
+----------------------+
| \
| OVSDB \ OpenFlow
| Mgmt \
| \
+============================================+
| +--------------+ +--------------+ |
| | | | | |
| | ovsdb-server |-------| ovs-vswitchd | |
| | | | | |
| +--------------+ +--------------+ |
| | |
| +----------------+ |
| | Forwarding Path| |
| +----------------+ |
+============================================+
Figure 1: Open vSwitch Interfaces

以后的关于OVSDB管理协议的用法将在 DB-SCHEMA 提供。

OVSDB 结构

这一章节将介绍OVSDB数据库结构的大纲,这里介绍的会比较讲简单明了,完整和目前的 OVS 数据库模型介绍请参考 DB-SCHEMA ,也可以查看章节 4.1.2 来了解OVSDB管理协议如何用以当前数据库模型。

JSON 用法

​ ovsdb使用JSON格式作为其数据库模型(schema)以及通信协议(wire protocol)的格式。JSON格式在Open vSwitch有以下限制:

  • 空字节(\u000)不能在strings类型中使用
  • 只支持UTF-8编码

<string> json的字符串格式 ,允许所有unicode字符串,使用时不允许用空字节

<id> 一段符合[a-zA-Z_][a-zA-Z0-9_]*正则的字符串 , id_ 开头并保留实现方式,不允许用户使用。

<version> 一段表示版本号的 JSON 字符串, 满足 [0-9]+\.[0-9]+\.[0-9]+

<boolean> ture or false , 你懂的

<number> 你懂的

<integer> JSON number 类型实现的一个整数值 , 范围:-(2**63)…+(2**63)-1

<json-value> 任何 JSON 值

<nonull-json-value> 任何 JSON 非空值

<error> 一段 JSON 对象包含下列成员

1
2
3
4
5
6
7
8
9
10
11
12
13

"error": <string> required
"details": <string> optional

etc:
"error": "resources exhausted"
The operation requires more resources (memory, disk, CPU, etc.)
than are currently available to the database server.
该操作对于当前使用的数据库服务器需要更多资源,如内存,硬盘,cpu之类的。
"error": "I/O error"
Problems accessing the disk, network, or other required
resources prevented the operation from completing.
硬盘、网络或者其他的内容来源拒绝了操作。